import {StoreRoot, mapSet} from "@/stores/StoreRoot";
import {StoreBase} from "@/stores/StoreBase";
import Common from "@/lib/Common";

/**
 * 状态管理器
 */
class StoreManager {

    get(storeKey, defaultValue) {
        return StoreRoot.get(Common.toSymbol(storeKey)) || defaultValue
    }

    set(store, replace) {
        mapSet(StoreRoot, store, undefined, replace)
    }

    delete(store) {
        let storeKey = store
        if (typeof store === 'object') {
            storeKey = store.storeKey
            if (!storeKey && store.name) {
                storeKey = Common.toSymbol(store.name)
            }
        }
        const _store = StoreRoot.get(storeKey)
        if (_store && _store.parent && _store.parent instanceof StoreBase) {
            _store.parent.delete(storeKey)
        }
        StoreRoot.delete(storeKey)
    }

    has(storeKey) {
        return StoreRoot.has(storeKey)
    }

    clear() {
        return StoreRoot.clear()
    }

    create(store, parent) {
        const obj = parent || this
        obj.set(store)
        return store
    }
}

export default new StoreManager()